#!/usr/bin/env python
# _*_ coding:UTF-8 _*_
"""
__author__ = 'shede333'
"""

import argparse
import os
import shutil


def head(dir_path, text=None):
    if not os.path.isdir(dir_path):
        raise RuntimeError("不是目录: {}".format(dir_path))
    if not text:
        text = os.path.basename(dir_path)
        print("使用目录名称作为前缀：'{}'".format(text))
    if not len(text):
        raise RuntimeError("text 不能为空")
    all_count = 0
    valid_count = 0
    for file_name in sorted(os.listdir(dir_path)):
        if file_name.startswith("."):
            continue  # 不支持隐藏文件
        all_count += 1
        if file_name.startswith(text):
            print("\t* 跳过，已有前缀：{}".format(file_name))
            continue
        src_path = os.path.join(dir_path, file_name)
        new_name = "{}{}".format(text, file_name)
        dst_path = os.path.join(dir_path, new_name)
        if os.path.exists(dst_path):
            print("\t* 跳过，已存在：{}".format(dst_path))
            continue
        print("rename from '{}' to '{}".format(file_name, new_name))
        shutil.move(src_path, dst_path)
        valid_count += 1
    print("\n({}/{}个) all finish!".format(valid_count, all_count))


def parse_arg():
    """解析命令行的输入的参数"""
    parser = argparse.ArgumentParser("批量重命名")
    subparsers = parser.add_subparsers(help="支持的命令如下：")

    head_parser = subparsers.add_parser("head", help="在文件名头部插入字符串")
    head_parser.set_defaults(func=head)
    head_parser.add_argument("dir_path", help="目录路径")
    head_parser.add_argument("-t", "--text", required=False, help="添加的字符串")

    args = parser.parse_args()
    return args


def main():
    args = parse_arg()
    f_params = args.__dict__.copy()
    del f_params["func"]  # 删除无用参数
    args.func(**f_params)  # 执行命令对应的函数


if __name__ == '__main__':
    main()
